#ifndef __SHAPE_H__
#define __SHAPE_H__

#include "SDLDrawManager.h"
#include "Stage.h"
#include <typeinfo>
#include <math.h>





enum ShapeStatus { ACTIVE, INACTIVE, MOVING_LEFT, MOVING_RIGHT, QUIET, DEATH};

class Shape {

	private:
		char* id;
        
		int rColorFigura;
		int gColorFigura;
		int bColorFigura;

		int rColorLinea;
		int gColorLinea;
		int bColorLinea;

		char* idTextura;
		int lineThickness;

		ShapeStatus status;
		Point* speed;
		bool interpolate;

	public:
		Shape(); // Constructor.
		virtual ~Shape(); // Destructor.

		// GET y SET para cada atributo.
		void setId(char* nuevoId);
		char* getId();
		
		void setRColorFigura(int nuevoRColorFigura);
		int getRColorFigura();

		void setGColorFigura(int nuevoGColorFigura);
		int getGColorFigura();

		void setBColorFigura(int nuevoBColorFigura);
		int getBColorFigura();

		void setRColorLinea(int nuevoRColorLinea);
		int getRColorLinea();

		void setGColorLinea(int nuevoGColorLinea);
		int getGColorLinea();

		void setBColorLinea(int nuevoBColorLinea);
		int getBColorLinea();

		void setIdTextura(char* nuevoIdTextura);
		char* getIdTextura();

		void setLineThickness(int newLineThickness);
		int getLineThickness();

		bool getInterpolate();
		void setInterpolate(bool b);

		ShapeStatus getStatus();
		void setStatus(ShapeStatus status);

		Point* getSpeed();
		void setSpeed(Point* speed);

		virtual int serialize(Element* elem)=0;

		virtual void hydrate(Element* elem)=0;

		virtual void draw(SDL_Surface* screen)=0;
		
		virtual void drawTexture(SDL_Surface *screen,int thickness)=0;

		// decide que le sucede a este shape cuando 
		// colisiona contra el otro shape pasado por parametro
		virtual void collide(Shape* shape, Point* puntoChoque)=0;

		// actualiza el estado del shape, basandose en el valor de status
		virtual void update()=0;

		bool isInDisplay (Point* point1, Point* point2, Point* point3, Point* point4);




};



#endif __SHAPE_H__